Page({
  data: {
    currentTab: 0, // 0=注册，1=修改密码

    // 注册表单数据（对应后端User的account、password）
    registerForm: {
      account: '',    // 账号（后端User.account）
      password: '',   // 密码（后端User.password）
      confirmPassword: '' // 确认密码（仅前端校验用）
    },
    // 注册表单错误提示
    registerErrors: {
      account: '',
      password: '',
      confirmPassword: ''
    },

    // 修改密码表单数据（对应后端接口参数）
    editForm: {
      account: '',       // 账号（后端User.account）
      oldPassword: '',   // 原密码（后端User.password）
      newPassword: '',   // 新密码（后端User.password）
      confirmNewPassword: '' // 确认新密码（仅前端校验用）
    },
    // 修改密码表单错误提示
    editErrors: {
      account: '',
      oldPassword: '',
      newPassword: '',
      confirmNewPassword: ''
    }
  },

  // 1. 切换标签页（注册/修改密码）
  switchTab(e) {
    this.setData({ currentTab: e.currentTarget.dataset.tab });
  },

  // 2. 注册表单输入事件（统一处理account/password/confirmPassword）
  handleRegisterInput(e) {
    const key = e.currentTarget.dataset.key; // 获取当前输入的字段（account/password等）
    this.setData({ [`registerForm.${key}`]: e.detail.value });
  },

  // 3. 修改密码表单输入事件（统一处理account/oldPassword等）
  handleEditInput(e) {
    const key = e.currentTarget.dataset.key;
    this.setData({ [`editForm.${key}`]: e.detail.value });
  },

  // 4. 注册表单前端校验（正则表达式）
  validateRegisterForm() {
    const { account, password, confirmPassword } = this.data.registerForm;
    const errors = { account: '', password: '', confirmPassword: '' };
    let isValid = true;

    // 账号校验：3-16位字母/数字/下划线（匹配后端User.account）
    const accountReg = /^[a-zA-Z0-9_]{3,16}$/;
    if (!account) {
      errors.account = '请输入账号';
      isValid = false;
    } else if (!accountReg.test(account)) {
      errors.account = '账号需为3-16位字母/数字/下划线';
      isValid = false;
    }

    // 密码校验：6-18位，必须包含字母+数字（匹配后端User.password）
    const passwordReg = /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{6,18}$/;
    if (!password) {
      errors.password = '请输入密码';
      isValid = false;
    } else if (!passwordReg.test(password)) {
      errors.password = '密码需为6-18位，且包含字母+数字';
      isValid = false;
    }

    // 确认密码校验
    if (!confirmPassword) {
      errors.confirmPassword = '请确认密码';
      isValid = false;
    } else if (confirmPassword !== password) {
      errors.confirmPassword = '两次密码输入不一致';
      isValid = false;
    }

    this.setData({ registerErrors: errors });
    return isValid;
  },

  // 5. 修改密码表单前端校验
  validateEditForm() {
    const { account, oldPassword, newPassword, confirmNewPassword } = this.data.editForm;
    const errors = { account: '', oldPassword: '', newPassword: '', confirmNewPassword: '' };
    let isValid = true;

    // 账号校验
    if (!account) {
      errors.account = '请输入已注册的账号';
      isValid = false;
    }

    // 原密码校验
    if (!oldPassword) {
      errors.oldPassword = '请输入原密码';
      isValid = false;
    }

    // 新密码校验（同注册密码规则）
    const passwordReg = /^(?=.*[a-zA-Z])(?=.*\d)[a-zA-Z\d]{6,18}$/;
    if (!newPassword) {
      errors.newPassword = '请输入新密码';
      isValid = false;
    } else if (!passwordReg.test(newPassword)) {
      errors.newPassword = '新密码需为6-18位，且包含字母+数字';
      isValid = false;
    } else if (newPassword === oldPassword) {
      errors.newPassword = '新密码不能与原密码相同';
      isValid = false;
    }

    // 确认新密码校验
    if (!confirmNewPassword) {
      errors.confirmNewPassword = '请确认新密码';
      isValid = false;
    } else if (confirmNewPassword !== newPassword) {
      errors.confirmNewPassword = '两次新密码输入不一致';
      isValid = false;
    }

    this.setData({ editErrors: errors });
    return isValid;
  },

  // 6. 处理注册请求（调用后端/api/user/register接口）
  handleRegister() {
    // 先做前端校验，校验不通过则不发请求
    if (!this.validateRegisterForm()) return;

    const { account, password } = this.data.registerForm;
    // 调用后端注册接口（替换为你的后端实际域名）
    wx.request({
      url: 'http://localhost:8080/User/register', 
      method: 'POST',
      data: {
        account: account,    // 对应后端User.account
        password: password   // 对应后端User.password（若后端有密码加密，前端无需额外处理）
      },
      success: (res) => {
        // 根据后端R类的code判断结果
        if (res.data.code === 200) {
          wx.showToast({ title: '注册成功！', icon: 'success', duration: 1500 });
          // 注册成功后清空表单
          this.setData({
            registerForm: { account: '', password: '', confirmPassword: '' }
          });
        } else {
          // 后端返回错误信息（如账号已注册）
          wx.showToast({ title: res.data.msg, icon: 'none', duration: 1500 });
        }
      },
      fail: () => {
        wx.showToast({ title: '网络错误，请重试', icon: 'none', duration: 1500 });
      }
    });
  },

  // 7. 处理修改密码请求（调用后端/api/user/updatePassword接口）
  handleUpdatePassword() {
    // 先做前端校验，校验不通过则不发请求
    if (!this.validateEditForm()) return;

    const { account, oldPassword, newPassword } = this.data.editForm;
    // 调用后端修改密码接口（替换为你的后端实际域名）
    wx.request({
      url: 'http://localhost:8080/User/updatePassword',
      method: 'POST',
      data: {
        account: account,      // 对应后端User.account
        password: oldPassword, // 原密码（对应后端User.password，与Controller参数匹配）
        nickname: newPassword  // 新密码（复用User.nickname字段，与Controller参数匹配）
      },
      success: (res) => {
        if (res.data.code === 200) {
          wx.showToast({ title: '密码修改成功！', icon: 'success', duration: 1500 });
          // 修改成功后清空表单
          this.setData({
            editForm: { account: '', oldPassword: '', newPassword: '', confirmNewPassword: '' }
          });
        } else {
          wx.showToast({ title: res.data.msg, icon: 'none', duration: 1500 });
        }
      },
      fail: () => {
        wx.showToast({ title: '网络错误，请重试', icon: 'none', duration: 1500 });
      }
    });
  }
});